package com.intct.hbase.namespace;

import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

/**
 * @author gufg
 * @since 2025-11-03 10:43
 */
public class CreateNamespace {
    public static void main(String[] args) throws IOException {
        // 与HBase建立连接
        Connection conn = ConnectionFactory.createConnection();
        Admin admin = conn.getAdmin();

        // 命名空间名称
        String namespaceName = "intct86_api";

        try {
            // 获取HBase中所有命名空间
            String[] listNamespaces = admin.listNamespaces();
            // 将其转为列表
            List<String> listNamespace = Arrays.asList(listNamespaces);

            // 判断命名空间(调用list特殊方法contains)
            if (!listNamespace.contains(namespaceName)) {
                // 创建一个命名空间描述
                NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(namespaceName).addConfiguration("intct86", "api").build();

                // 创建命名空间
                admin.createNamespace(namespaceDescriptor);
            }
        } catch (IOException e) {
            System.out.println("命名空间创建失败！ namespace= " + namespaceName);
            throw new RuntimeException("命名空间创建失败！ namespace= " + namespaceName);
        } finally {
            // 关闭资源
            if (admin != null) {
                admin.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }
}
